home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / td187src.lzh / DIVERSES.I < prev    next >
Text File  |  1991-12-14  |  6KB  |  264 lines

  1. IMPLEMENTATION MODULE Diverses;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS;
  4. FROM Types  IMPORT Block;
  5.  
  6. IMPORT MagicAES, 
  7.        MagicStrings, 
  8.        MagicSys, 
  9.        MagicVDI, 
  10.        mtAlerts, 
  11.        mtAppl, 
  12.        MathLib0,
  13.        RSCindices;
  14.  
  15. (**
  16. IMPORT RTD;
  17. **)
  18.  
  19. PROCEDURE round(real : LONGREAL) : INTEGER;
  20. (* Gerundeten Wert *)
  21. BEGIN
  22.   IF real<0.0 THEN
  23.     RETURN -MagicSys.CastToInt( MathLib0.entier(-real + 0.5));
  24.    ELSE
  25.     RETURN MagicSys.CastToInt( MathLib0.entier(real + 0.5));
  26.   END;
  27. END round;
  28.  
  29. PROCEDURE max(a, b : INTEGER) : INTEGER;
  30. BEGIN
  31.   IF a>b THEN
  32.     RETURN a;
  33.    ELSE
  34.     RETURN b;
  35.   END;
  36. END max;
  37.  
  38. PROCEDURE min(a, b : INTEGER) : INTEGER;
  39. BEGIN
  40.   IF a>b THEN
  41.     RETURN b;
  42.    ELSE
  43.     RETURN a;
  44.   END;
  45. END min;
  46.  
  47. PROCEDURE BlockIntersect(a, b : Block ; VAR bsect : Block) : BOOLEAN ;
  48.      (* liefert in <bsect> die Schnittfläche von <a> und <b>,
  49.         desweiteren TRUE wenn Schnitt vorlag *)
  50.  
  51. BEGIN
  52.   bsect.x := max(a.x, b.x) ;
  53.   bsect.y := max(a.y, b.y) ;
  54.   bsect.w := min(a.x + a.w, b.x + b.w) - bsect.x ;
  55.   bsect.h := min(a.y + a.h, b.y + b.h) - bsect.y ;
  56.   RETURN (bsect.w > 0) AND (bsect.h > 0)
  57. END BlockIntersect ;
  58.  
  59. VAR MausForm : INTEGER;
  60.     MausOns  : INTEGER;
  61.  
  62. PROCEDURE Alert (def: INTEGER; str: ARRAY OF CHAR): INTEGER;
  63. VAR res : INTEGER;
  64. BEGIN
  65.   IF DialCentered THEN
  66.     res := mtAlerts.Alert(def, str);
  67.    ELSE
  68.     res := mtAlerts.MouseAlert(def, str);
  69.   END;
  70.   RETURN res;
  71. END Alert;
  72.  
  73. CONST MaxAlertNum = 27;
  74.       MaxFselNum  = 10;
  75.       MaxHelpNum  = 46;
  76.  
  77. PROCEDURE NumAlert (alertnum, default : INTEGER) : INTEGER;
  78. VAR result, count, i  : INTEGER;
  79.     Tree              : POINTER TO ARRAY [0..255] OF MagicAES.OBJECT;
  80.     tempstr, rscstr   : ARRAY [0..255] OF CHAR;
  81.     brackstr1,
  82.     brackstr2, midstr : ARRAY [0..1] OF CHAR;
  83. BEGIN
  84.   brackstr1 := '[';
  85.   brackstr2 := ']';
  86.   midstr    := '|';
  87.   tempstr   := '';
  88.   result := -1;
  89.   IF (alertnum>0) AND (alertnum<=MaxAlertNum) THEN
  90.     Tree  := MagicAES.RsrcGaddr( MagicAES.RTREE , RSCindices.alerts ) ;
  91.     count := alertnum-1;
  92.     i := 1;
  93.     WHILE (count>0) DO
  94. (**
  95.       RTD.ShowVar('indx', i);
  96.       RTD.ShowVar('Next', Tree^[i].obNext);
  97.       RTD.ShowVar('Head', Tree^[i].obHead);
  98.       RTD.ShowVar('Tail', Tree^[i].obTail);
  99. **)
  100.       i := Tree^[i].obNext;
  101.       DEC(count);
  102.     END;
  103.     FOR count := Tree^[i].obHead TO Tree^[i].obTail DO
  104.       MagicStrings.Assign(Tree^[count].StringPtr^, rscstr);
  105. (**
  106.       RTD.Write('rscstr', rscstr);
  107. **)
  108.       IF count=Tree^[i].obHead THEN
  109.         MagicStrings.Assign(rscstr, tempstr);
  110.         MagicStrings.Insert(brackstr1, tempstr, 1);
  111.         MagicStrings.Insert(brackstr2, tempstr, 1);
  112.         MagicStrings.Insert(brackstr1, tempstr, 0);
  113.       ELSIF count=Tree^[i].obTail THEN
  114.         MagicStrings.Append(brackstr2, tempstr);
  115.         MagicStrings.Append(brackstr1, tempstr);
  116.         MagicStrings.Append(rscstr, tempstr);
  117.         MagicStrings.Append(brackstr2, tempstr);
  118.       ELSE
  119.         MagicStrings.Append(midstr, tempstr);
  120.         MagicStrings.Append(rscstr, tempstr);
  121.       END;
  122.     END;
  123. (**
  124.     RTD.Write('tempstr', tempstr);
  125. **)
  126.     IF tempstr[0]<>0C THEN
  127.       result := Alert(default, tempstr);
  128.     END;
  129.   END;
  130. (**
  131.   RTD.ShowVar('resut', result);
  132. **)
  133.   RETURN result;
  134. END NumAlert;
  135.  
  136. PROCEDURE GetText(tree, num : INTEGER; VAR txt : ARRAY OF CHAR);
  137. VAR Tree : POINTER TO ARRAY [0..255] OF MagicAES.OBJECT;
  138. BEGIN
  139.   txt[0] := 0C;
  140.   Tree  := MagicAES.RsrcGaddr( MagicAES.RTREE , tree ) ;
  141.   MagicStrings.Assign(Tree^[num].StringPtr^, txt);
  142. END GetText;
  143.  
  144. PROCEDURE GetHelpText(num : INTEGER; VAR txt : ARRAY OF CHAR);
  145. BEGIN
  146.   IF (num>0) AND (num<=MaxHelpNum) THEN
  147.     GetText(RSCindices.helptxt, num, txt);
  148.   END;
  149. END GetHelpText;
  150.  
  151. PROCEDURE GetFSelText(num : INTEGER; VAR txt : ARRAY OF CHAR);
  152. BEGIN
  153.   IF (num>0) AND (num<=MaxFselNum) THEN
  154.     GetText(RSCindices.flsltxt, num, txt);
  155.   END;
  156. END GetFSelText;
  157.  
  158. (*----------------------------------------------------------------------*
  159.  *                            Mäusetreiberei                            *
  160.  *----------------------------------------------------------------------*)
  161.  
  162. PROCEDURE MouseOn;
  163. BEGIN
  164.  INC(MausOns);
  165.  IF MausOns=1 THEN
  166. (**
  167.   RTD.Message('Call MagicVDI.ShowCursor');
  168. **)
  169.   MagicVDI.ShowCursor (mtAppl.VDIHandle, FALSE);
  170. (**
  171.   RTD.Message('Call ready...');
  172. **)
  173.  END;
  174. (**
  175.  RTD.Message('Call MagicAES.GrafMouse');
  176. **)
  177.  MagicAES.GrafMouse (MausForm, NIL);
  178. (**
  179.  RTD.Message('Call ready...');
  180. **)
  181. END MouseOn;
  182.  
  183.  
  184. PROCEDURE MouseArrow;
  185. BEGIN
  186.  MausForm:= MagicAES.ARROW;  MouseOn;
  187. END MouseArrow;
  188.  
  189.  
  190. PROCEDURE MouseCursor;
  191. BEGIN
  192.  MausForm:= MagicAES.TEXTCRSR;  MouseOn;
  193. END MouseCursor;
  194.  
  195.  
  196. PROCEDURE MouseBusy;
  197. BEGIN
  198.  MausForm:= MagicAES.BUSYBEE;  MouseOn;
  199. END MouseBusy;
  200.  
  201.  
  202. PROCEDURE MouseFinger;
  203. BEGIN
  204.  MausForm:= MagicAES.POINTHAND;  MouseOn;
  205. END MouseFinger;
  206.  
  207.  
  208. PROCEDURE MouseHand;
  209. BEGIN
  210.  MausForm:= MagicAES.FLATHAND;  MouseOn;
  211. END MouseHand;
  212.  
  213.  
  214. PROCEDURE MouseThincross;
  215. BEGIN
  216.  MausForm:= MagicAES.THINCROSS;  MouseOn;
  217. END MouseThincross;
  218.  
  219.  
  220. PROCEDURE MouseThickcross;
  221. BEGIN
  222.  MausForm:= MagicAES.THICKCROSS;  MouseOn;
  223. END MouseThickcross;
  224.  
  225.  
  226. PROCEDURE MouseOutline;
  227. BEGIN
  228.  MausForm:= MagicAES.OUTLCROSS;  MouseOn;
  229. END MouseOutline;
  230.  
  231.  
  232. PROCEDURE MouseUser;
  233. BEGIN
  234.  MausForm:= MagicAES.USERDEF;  MouseOn;
  235. END MouseUser;
  236.  
  237.  
  238. PROCEDURE MouseOff;
  239. BEGIN
  240.  DEC(MausOns, 1);
  241.  IF (MausOns<=0) THEN
  242.    IF (MausOns=0) THEN
  243.      MagicVDI.HideCursor (mtAppl.VDIHandle);
  244.    END;
  245.    MausOns := 0;
  246.  END;
  247. END MouseOff;
  248.  
  249. PROCEDURE ForceMouseOn;
  250. BEGIN
  251.   MausOns := 0; MouseOn;
  252. END ForceMouseOn;
  253.  
  254. PROCEDURE ForceMouseOff;
  255. BEGIN
  256.   MausOns := 1; MouseOff;
  257. END ForceMouseOff;
  258.  
  259. BEGIN
  260.   DialCentered := TRUE;
  261.   MausOns      := 0;
  262.   MausForm     := MagicAES.ARROW;
  263. END Diverses.
  264.